package com.hnust.controller;

import com.hnust.domain.Major;
import com.hnust.domain.record.*;
import com.hnust.service.MajorService;
import com.hnust.service.TokenService;
import com.hnust.util.Result;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 *创建人：游磊
 *创建时间：2020/10/6
 *描述：专业管理模块
 */
@CrossOrigin("*")
@RestController
@RequestMapping("/api/major")
public class MajorController {
    @Autowired
    private TokenService tokenService;
    @Autowired
    private MajorService majorService;


    /**
     * 点击专业
     * 管理，返回专业信息
     * @param token
     * @param collegeId 学院Id
     * @param current 当前页
     * @param rows 每页展示的数据条数
     * @return
     */
    @GetMapping("/get")
    public Result<MajorListResult> getMajorInfo(@RequestParam("token")String token,@RequestParam("collegeId") String collegeId,@RequestParam("currentPage")Integer current,@RequestParam("rows") Integer rows){
        // 验证用户的token是否正确
        if(tokenService.verifyToken(token,"院管理员")){
            return new Result<>(1, "获取数据成功", majorService.getMajorList(collegeId,current-1,rows,""));
        }
       return new Result<>(0, "没有操作权限,请登录", null);

    }

    /**
     * 根据专业名搜索专业
     * @param map token token信息,collegeId 学院id,current 当前第几页,rows 一页多少,name 专业名字
     * @return
     */
    @PostMapping("/query")
    public Result<MajorListResult> queryMajorInfo(@RequestBody Map<Object, Object> map){
        String token = map.get("token").toString();
        String collegeId = map.get("collegeId").toString();
        Integer current = (Integer) map.get("currentPage");
        Integer rows = (Integer) map.get("rows");
        String name = map.get("majorName").toString();

        // 验证用户的token是否正确
        if(tokenService.verifyToken(token,"院管理员")){
            return new Result<>(1, "获取数据成功", majorService.getMajorList(collegeId,current-1,rows,name));
        }
        return new Result<>(0, "没有操作权限,请登录", null);

    }

    /**
     * 删除专业
     * @param token token信息
     * @param majorId 专业id
     * @return
     */
    @GetMapping("/delete")
    public Result<MajorListResult> deleteMajor(
            @RequestParam("token")String token,
            @RequestParam("majorId")String majorId
    ){
        // 验证用户的token是否正确
        if(tokenService.verifyToken(token,"院管理员")){
            List<String> ids = new ArrayList<>();
            ids.add(majorId);
            // 开始删除id
            if (majorService.deleteMajor(ids)){
                return new Result<>(1, "删除成功", null);
            } else {
                return new Result<>(0, "删除失败", null);
            }
        }
        return new Result<>(0, "没有操作权限,请登录", null);
    }

    /**
     * 删除专业
     * @param map token token信息,majorIds 专业id列表
     * @return
     */
    @PostMapping("/delete")
    public Result<MajorListResult> deleteMajors(@RequestBody Map<String,Object> map)
    {
        String token=map.get("token").toString();
        JSONArray majorIds= JSONArray.fromObject(map.get("majorIds"));

        // 验证用户的token是否正确
        if(tokenService.verifyToken(token,"院管理员")){
            // 开始删除id
            if (majorService.deleteMajor(majorIds)){
                return new Result<>(1, "删除成功", null);
            } else {
                return new Result<>(0, "删除失败", null);
            }
        }
        return new Result<>(0, "没有操作权限,请登录", null);
    }

    /**
     * 添加专业
     * @param map token token信息,name 专业名字,collegeId 学院id
     * @return
     */
    @PostMapping("/add")
    public Result<MajorListRecord> addMajor(@RequestBody Map<String, String> map)
    {
        String token=map.get("token").toString();
        String name=map.get("majorName").toString();
        String collegeId=map.get("collegeId").toString();

        // 验证用户的token是否正确
        if(tokenService.verifyToken(token,"院管理员")){
            // 开始删除id
            MajorListRecord record = majorService.addMajor(name,collegeId);
            if (record.getName().equals("")){
                return new Result<>(0, "添加失败", null);
            } else {
                return new Result<>(1, "添加成功", record);
            }
        }
        return new Result<>(0, "没有操作权限,请登录", null);
    }

    /**
     * 编辑专业
     * @param map token token信息,name 专业名字,majorId 专业id
     * @return
     */
    @PostMapping("/modify")
    public Result<MajorListRecord> modifyMajor(@RequestBody Map<String, Object> map)
    {
        String token=map.get("token").toString();
        JSONObject jsonObject=JSONObject.fromObject(map.get("majorRecord"));
        MajorRecord majorRecord=(MajorRecord) JSONObject.toBean(jsonObject, MajorRecord.class);
        String name=majorRecord.getName();
        String majorId=majorRecord.getMajorId();
        // 验证用户的token是否正确
        if(tokenService.verifyToken(token,"院管理员")){
            // 开始删除id
            if (majorService.changeMajor(name,majorId)){
                return new Result<>(1, "修改成功", null);
            } else {
                return new Result<>(0, "修改失败", null);
            }
        }
        return new Result<>(0, "没有操作权限,请登录", null);
    }

    @GetMapping("/require")
    public Result<MajorGradRequirement> getMajorGradRequirement(
            @RequestParam("token")String token,
            @RequestParam("majorId")String majorId
    ){
        System.out.println(majorId);
        // 验证用户的token是否正确
        if(tokenService.verifyToken(token,"院管理员")){
            return new Result<MajorGradRequirement>(1,"返回成功",majorService.getMajorGradRequirement(majorId));
        }
        return new Result<>(0, "没有操作权限,请登录", null);
    }
}
